// 这段代码实现了一个寻找最长的回文子串的算法，其逻辑如下：
// 函数 longestPalindrome_bf：
// 首先检查输入字符串 s 的长度。如果长度小于2，直接返回 s，因为单个字符或空字符串本身就是回文。
// 初始化两个变量 start 和 end，它们分别用于记录最长回文子串的起始和结束索引。
// 使用一个循环遍历字符串 s 的每个字符。对于每个字符，调用 expandAroundCenter 函数来检查以该字符为中心的回文子串。
// 在 expandAroundCenter 函数返回的长度中，选择最长的一个，并更新 start 和 end。
// 最后，使用 s.substring(start, end + 1) 返回最长回文子串。
// 辅助函数 expandAroundCenter：
// 这个函数用于检查以给定 left 和 right 索引为中心的字符串是否是回文。
// 使用一个 while 循环，只要 left 大于等于0，right 小于字符串长度，且 s[left] 等于 s[right]，就继续向两边扩展。
// 当不再满足回文条件时，跳出循环，并返回回文子串的长度，即 right - left - 1。
// 具体到代码逻辑：
// 外层循环遍历字符串中的每个位置 i，将其作为中心点。
// 对于每个中心点，expandAroundCenter 函数被调用两次：一次检查奇数长度的回文（中心在单个字符上），另一次检查偶数长度的回文（中心在两个字符之间）。
// 通过比较这两个结果，选择更长的回文子串。
// 如果找到的回文子串长度大于当前记录的最长回文子串长度，就更新 start 和 end。
// 最终，使用记录的起始和结束索引返回最长回文子串。

var longestPalindrome_bf = function (s) {
  if (s.length < 2) return s
  function expendCenterAround(left, right) {
    while (left >= 0 && right < s.length && s[left] === s[right]) {
      left--
      right++
    }
    return right - left - 1
  }

  let start = 0,
    end = 0
  for (let i = 0; i < s.length; i++) {
    let len1 = expendCenterAround(i, i)
    let len2 = expendCenterAround(i, i + 1)
    const len = Math.max(len1, len2)
    if (len > end - start) {
      start = i - Math.floor((len - 1) / 2)
      end = i + Math.floor(len / 2)
    }
  }
  return s.substring(start, end + 1)
}

const result = longestPalindrome_bf('babad')
console.log('🚀 ~ result:', result)
